#include <algorithm>
#include <cstdint>
#include <cstdlib>
#include <cstring>
#include <execution>
#include <iostream>
#include <map>
#include <numeric>
#include <set>

using ll = int64_t;
#define nv(v)#v<<": "<<(v)<<' '
auto &ci = std::cin;
auto &co = std::cout;

const ll mxn = 1e6+5;

auto ispm = new bool[mxn];

ll lb(ll n){
    return n&(-n);
}

int main(){
    ll n;
    ci>>n;
    // co<<nv(n)<<'\n';
    ll mxa{};
    ll *a{new ll[mxn+1]}, *mnfct{new ll[mxn+1]};
    for(ll i{0};i<n;i++){
        ci>>a[i];
        mxa = std::max(mxa, a[i]);
    }
    std::fill(ispm, ispm+mxa+1, true);
    ispm[1]=false;
    for(ll i{1};i<=mxa;i++)mnfct[i]=i;
    for(ll i{2};i<=mxa;i++){
        if(ispm[i]){
            for(ll j{i+i};j<=mxa;j+=i){
                if(ispm[j]){
                    ispm[j]=false;
                    mnfct[j]=i;
                }
            }
        }
    }

    // for(ll i{1};i<=mxa;i++)co<<mnfct[i]<<' ';
    // co<<'\n';
    auto srts = new ll[mxn+1];
    ll ans{};
    for(ll i{1};i<(1<<(n));i++){
        // std::fill(fcts, fcts+n, 0);
        // memset(fcts, 0, sizeof(ll)*mxa);
        auto sfs = new std::map<ll,ll>[n+1];
        std::set<ll> usdfct;
        // std::map<ll, ll> sfs[n+1];
        for(ll j{0};j<n;j++){
            if((1<<j)&i){
                ll now = a[j];
                while(now!=1){
                    // co<<nv(now)<<'\n';
                    // fcts[mnfct[now]]++;
                    auto it = sfs[j].find(mnfct[now]);
                    auto sit = usdfct.find(mnfct[now]);
                    if(sit==usdfct.end()){
                        usdfct.insert(mnfct[now]);
                    }
                    if(it==sfs[j].end()){
                        // sfs->insert({mnfct[now], 1});
                        sfs->emplace(mnfct[now], 1);
                    }else{
                        (*it).second++;
                    }
                    now/=mnfct[now];
                }
            }
        }
        // ll ans{};
        
        for(ll j:usdfct){
            ll sum{};
            ll srtn{};
            co<<"getting: "<<j<<'\n';
            for(ll k{0};k<n;k++){
                if(auto it = sfs[k].find(j);it!=sfs[k].end()){
                    co<<it->first;
                    srts[++srtn]=0;
                    srts[srtn]=it->second;
                    // co<<nv(it->second)<<'\n';
                }
            }
            co<<'\n';
            // for(ll k{1};k<=srtn;k++)co<<srts[k]<<' ';
            // co<<'\n';
            std::sort(srts+1, srts+1+srtn);
            for(ll k{1};k<=srtn;k++)co<<srts[k]<<' ';
            co<<'\n';
            // for(ll i{1};i<=srtn;i++)sum+=srts[i];
            // co<<nv(srtn)<<'\n';
            ll min = std::max(ll(1), srtn/2+1);
            // co<<nv(min)<<'\n';
            if(srtn==1){
                sum=srts[1];
            }else{
                for(ll k{1};k<=srtn;k++){
                    sum+=(std::abs(srts[k]-srts[min]));
                    co<<nv(srts[k])<<nv(srts[min])<<'\n';
                }
            }
            // co<<'\n';
            // co<<nv(j)<<'\n';
            // co<<nv(srts[min])<<'\n';
            // co<<"fct: "<<j<<'\n';
            co<<nv(sum)<<'\n';
            ans+=sum;
        }
        // co<<"---next sub\n";
    }
    co<<ans<<'\n';
    // for(ll i{1};i<=mxa;i++)co<<fcts[i]<<' ';
    // co<<'\n';
}
